﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ArithmeticLibrary.Tree;

namespace ArithmeticLibrary
{
    /// <summary>
    /// Visitor navstevujici uzly aritmetickeho stromu.
    /// </summary>
    /// <typeparam name="R">Navratova hodnota visitoru.</typeparam>
    /// <typeparam name="C">Kontext.</typeparam>
    public interface IExpressionVisitor<R, C>
    {
        R Visit(NumberNode node, C context);
        R Visit(VariableNode node, C context);
        R Visit(UnaryMinusNode node, C context);
        R Visit(SineNode node, C context);
        R Visit(CosineNode node, C context);
        R Visit(TangentNode node, C context);
        R Visit(LogarithmNode node, C context);
        R Visit(ExponentialNode node, C context);
        R Visit(PlusNode node, C context);
        R Visit(MinusNode node, C context);
        R Visit(MultiplyNode node, C context);
        R Visit(DivideNode node, C context);
        R Visit(PowerNode node, C context);
    }

}
